
import java.util.Arrays;

public class day1 {
    /**
     * 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ，返回 true ；如果数组中每个元素互不相同，返回 false 。
     * 示例 1：
     * 输入：nums = [1,2,3,1]
     * 输出：true
     * 示例 2：
     * 输入：nums = [1,2,3,4]
     * 输出：false
     */
    //先对数组进行从小到大进行排序, 将数组中第i 个和 第i+1 个进行比较 ,如果相等返回 true,否则返回false
    public boolean containsDuplicate(int[] nums) {
        Arrays.sort(nums);
        for (int i = 0; i < nums.length - 1; i++) {
            if (nums[i] == nums[i+1]) {
                return true;
            }
        }
        return false;
    }
    /**
     * 给你一个整数数组 nums ，请你找出一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。
     * 子数组 是数组中的一个连续部分。
     * 示例 1：
     * 输入：nums = [-2,1,-3,4,-1,2,1,-5,4]
     * 输出：6
     * 解释：连续子数组[4,-1,2,1] 的和最大，为6
     */
    public int maxSubArray(int[] nums) {
        //当当前序列和已经为负数时，说明此序列只能让之后的序列和减少
        // ，所以直接抛弃，把sum重置为0；并且数组每次累加时都进行一次比较把较大的序列和保存下来，
        // 这样只需要遍历数组一次就可以找到最大字数组和；
        int maxSum = nums[0];
        int sum = 0;
        for(int num : nums){
            sum += num;
            maxSum = Math.max(sum,maxSum);
            if(sum < 0 ){
                sum = 0;
            }
        }
        return maxSum;

    }
}
